/* eslint-disable @typescript-eslint/no-explicit-any */
import { PageParam } from '@ui/base-comp'
import { http, delay, HttpResponse } from 'msw'
import {
  incrementIdFromQueryParam,
  buildPageData,
  buildOkData,
} from '../../local-mock/util'
import mockjs from 'mockjs'

export const mswHandlers = [
  // mock分页接口
  http.post(
    '/local-mock-api/Person/post',
    async ({ request, params, cookies }) => {
      console.log(request, params, cookies)
      const reqBodyObj = (await request.json()) as PageParam
      console.log('msw 请求拦截执行,延迟2秒')
      console.log('body参数', reqBodyObj)
      const { size } = reqBodyObj
      const incrementCall = incrementIdFromQueryParam(reqBodyObj)
      const map = new Map()
      map.set(`list|${size}`, [
        {
          // title: '@ctitle(5, 25)',
          // content: '@cparagraph(2,4)', // 最少2段落，最多4段落
          // id:"@id",
          // author: '@cname()',
          // date: '@date("yyyy-MM-dd")',
          // email: '@email()',
          // ip: 'ip()',
          // region: 'region()', // 华中，华南，华西这种全国性区域
          // province: 'province()', // 省份
          // city: '@city()', // 城市: 重庆市
          // city: '@city(true)', // 城市: 安徽省 六安市
          // county: '@county()', // 五原县
          // county: '@county(true)', // 新疆维吾尔自治区 巴音郭楞蒙古自治州 和静县
          // customRandomStr: mockjs.Random.pick(['你好', '世界', 'i', 'o', 'u']), // 在这个数组内随机一个
          // 'pic|1-36': 1, // 产生1-36的随机数字
          // image: mockjs.Random.image('200x100'), // 生成一个宽200，高100的图片的url地址
          // image: mockjs.Random.image('200x100', '#FF6600'), // 生成一个宽200，高100，背景色为 #FF6600，的图片的url地址
          // image: mockjs.Random.image('200x100', '#4A7BF7', 'Hello'), // 生成一个宽200，高100，背景色为 #4A7BF7，图片文字为: Hello 的图片的url地址
          // image: mockjs.Random.image('200x100', '#894FC4', '#FFF', 'png', 'Hello'), // 生成一个宽200，高100，背景色为 #894FC4，图片文字为: Hello 且文字颜色为 #FFF 的png图片的url地址

          name: '@ctitle(16)',
        },
      ])
      const tmpObj = [...map.entries()].reduce(
        (obj, [key, value]) => ((obj[key] = value), obj),
        {}
      )
      const obj = mockjs.mock(tmpObj) as any
      obj.list = (obj.list as any[]).map(item => ({
        ...item,
        idx: incrementCall(),
      }))
      // 模拟延迟
      await delay(2000)
      console.log('msw 请求拦截执行,延迟执行完毕')
      return HttpResponse.json(buildPageData(obj.list, 150, reqBodyObj))
      //   return HttpResponse.json({ hello: '你好' })
    }
  ),
  http.post('/local-mock-api/Person/timeout', async () => {
    await delay(30000)
    return HttpResponse.json(buildOkData(1))
  }),
]
